<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // null和undefined都是“无的值” 两个等号相比较是相等的，看似并没有什么区别
        // 历史原因
        // 根据C语言的传统，null被设计成可以自动转化为0
        // console.log(Number(null))
        // console.log(null+10)
        // 最初设计
        // JavaScript最初的设计：null表示一个“无”的对象，转化数值为0；
        //                      undefined表示一个“无”的原始值，转化数值为NaN
        // 用法：
        // null表示“没有对象”，既该处不应该有值。典型的用法：
        // （1）作为函数的参数，表示该函数的参数不是对象。
        // （2）作为对象原型链的终点。
        // getPrototypeOf 获取对象的原型
        //    console.log(Object.getPrototypeOf(Object.prototype)) 
        //    console.log(Object.prototype.__proto__) 
        // undefined表示缺少值，此处应该有一个值但还没有定义。典型的用法：
        // （1）变量被声明了，但是没有赋值时，就等于undefined.
        // （2）调用函数时，应该有的参数没有提供结果就是undefined
        // （3）对象没有赋值的属性，该属性的值为undefined
        // （4）函数没有返回值时，默认为undefined
        // 例如：
        var i;
        console.log(i)//undefined
        function f(x){
            console.log(x)//undefined
        }
        f()
        let obj= {}
        console.log(obj.name)//undefined
        let a = f()
        console.log(a)//undefined














    </script>
</body>
</html>